//==========================================================================
// Copyright (c) 2000-2008,  Elastos, Inc.  All Rights Reserved.
//==========================================================================

interface IMarshalTst;

#ifndef __INTERFACE_IMarshalTst_DEFINED__
#define __INTERFACE_IMarshalTst_DEFINED__

CAR_INTERFACE("F755FF50-8592-8444-5F74-80FCC34222C2")
IMarshalTst : public IInterface
{
    virtual CARAPI_(PInterface) Probe(
            /* [in] */ _ELASTOS REIID riid) = 0;

    static CARAPI_(IMarshalTst*) Probe(PInterface pObj)
    {
        return (IMarshalTst*)pObj->Probe(EIID_IMarshalTst);
    }

    virtual CARAPI MarshalTst1(
        /* [in] */ _ELASTOS Byte CharIn,
        /* [in] */ _ELASTOS Byte ByteIn,
        /* [in] */ _ELASTOS Boolean BoolIn,
        /* [out] */ _ELASTOS Byte * pCharOut,
        /* [out] */ _ELASTOS Byte * pByteOut,
        /* [out] */ _ELASTOS Boolean * pBoolOut) = 0;

    virtual CARAPI MarshalTst2(
        /* [in] */ _ELASTOS Int16 ShortIn,
        /* [in] */ _ELASTOS Int16 UShortIn,
        /* [out] */ _ELASTOS Int16 * pShortOut,
        /* [out] */ _ELASTOS Int16 * pUShortOut) = 0;

    virtual CARAPI MarshalTst3(
        /* [in] */ _ELASTOS Int32 Int32In,
        /* [in] */ _ELASTOS Int32 UInt32In,
        /* [out] */ _ELASTOS Int32 * pInt32Out,
        /* [out] */ _ELASTOS Int32 * pUInt32Out) = 0;

    virtual CARAPI MarshalTst4(
        /* [in] */ _ELASTOS Int64 Int64In,
        /* [in] */ _ELASTOS Int64 UInt64In,
        /* [out] */ _ELASTOS Int64 * pInt64Out,
        /* [out] */ _ELASTOS Int64 * pUInt64Out) = 0;

    virtual CARAPI MarshalTst5(
        /* [in] */ _ELASTOS Float FloatIn,
        /* [in] */ _ELASTOS Double DoubleIn,
        /* [out] */ _ELASTOS Float * pFloatOut,
        /* [out] */ _ELASTOS Double * pDoubleOut) = 0;

    virtual CARAPI MarshalTst6(
        /* [in] */ _ELASTOS AChar acIn,
        /* [in] */ _ELASTOS WChar wcIn,
        /* [out] */ _ELASTOS AChar * pAcOut,
        /* [out] */ _ELASTOS WChar * pWcOut) = 0;

    virtual CARAPI MarshalTst7(
        /* [in] */ const struct TEST_STRUCT_SDK1 & StructIn1,
        /* [in] */ const struct TEST_STRUCT_SDK1 & StructIn2,
        /* [out] */ PTEST_STRUCT_SDK1 pStructOut1,
        /* [out] */ PTEST_STRUCT_SDK1 pStructOut2) = 0;

    virtual CARAPI MarshalTst8(
        /* [in] */ const struct TEST_STRUCT_SDK2 & StructIn1,
        /* [in] */ const struct TEST_STRUCT_SDK2 & StructIn2,
        /* [out] */ PTEST_STRUCT_SDK2 pStructOut1,
        /* [out] */ PTEST_STRUCT_SDK2 pStructOut2) = 0;

    virtual CARAPI MarshalTst9(
        /* [in] */ TestEnum_SDK EnumIn,
        /* [out] */ TestEnum_SDK * pEnumOut) = 0;

    virtual CARAPI MarshalTst10(
        /* [in] */ IInterface * pIObjectIn,
        /* [out] */ IInterface ** ppIObjectOut) = 0;

    virtual CARAPI MarshalTst11(
        /* [in] */ _ELASTOS EMuid * pguidIn,
        /* [in] */ _ELASTOS InterfaceID * pInterfaceIDIn,
        /* [in] */ _ELASTOS ClassID * pClassIDIn,
        /* [out] */ _ELASTOS EMuid * pguidOut,
        /* [out] */ _ELASTOS InterfaceID * pInterfaceIDOut,
        /* [out] */ _ELASTOS ClassID * pClassIDOut) = 0;

    virtual CARAPI MarshalTst12(
        /* [in] */ _ELASTOS AString asIn,
        /* [in] */ _ELASTOS WString wsIn,
        /* [out] */ _ELASTOS AStringBuf * pAsbOut,
        /* [out] */ _ELASTOS WStringBuf * pWsbOut) = 0;

    virtual CARAPI MarshalTst13(
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Byte> & AInt8In,
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Byte> & AByteIn,
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Boolean> & ABoolIn,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Byte> * pAInt8Out,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Byte> * pAByteOut,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Boolean> * pABoolOut) = 0;

    virtual CARAPI MarshalTst14(
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Int16> & AInt16In,
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Int16> & AUInt16In,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Int16> * pAInt16Out,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Int16> * pAUInt16Out) = 0;

    virtual CARAPI MarshalTst15(
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Int32> & AInt32In,
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Int32> & AUInt32In,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Int32> * pAInt32Out,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Int32> * pAUInt32Out) = 0;

    virtual CARAPI MarshalTst16(
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Int64> & AInt64In,
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Int64> & AUInt64In,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Int64> * pAInt64Out,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Int64> * pAUInt64Out) = 0;

    virtual CARAPI MarshalTst17(
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Float> & AFloatIn,
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Double> & ADoubleIn,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Float> * pAFloatOut,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Double> * pADoubleOut) = 0;

    virtual CARAPI MarshalTst18(
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS AChar> & AACharIn,
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS WChar> & AWCharIn,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS AChar> * pAACharOut,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS WChar> * pAWCharOut) = 0;

    virtual CARAPI MarshalTst19(
        /* [in] */ const _ELASTOS BufferOf<struct TEST_STRUCT_SDK1> & AStructIn,
        /* [out] */ _ELASTOS BufferOf<struct TEST_STRUCT_SDK1> * pAStructOut) = 0;

    virtual CARAPI MarshalTst20(
        /* [in] */ const _ELASTOS BufferOf<struct TEST_STRUCT_SDK2> & AStructIn,
        /* [out] */ _ELASTOS BufferOf<struct TEST_STRUCT_SDK2> * pAStructOut) = 0;

    virtual CARAPI MarshalTst21(
        /* [in] */ const _ELASTOS BufferOf<IInterface *> & AObjectIn) = 0;

    //virtual CARAPI MarshalTst22(
    //    /* [out] */ _ELASTOS ArrayOf<IInterface*> * pAObjectOut) = 0;

    virtual CARAPI MarshalTst23(
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS EGuid> & AEGuidIn,
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS EMuid> & AEMuidIn,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS EGuid> * pAEGuidOut,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS EMuid> * pAEMuidOut) = 0;

    virtual CARAPI MarshalTst24(
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS ECode> & AECodeIn,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS ECode> * pAECodeOut) = 0;

    virtual CARAPI MarshalTst25(
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Byte> & AInt8In,
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Int16> & AInt16In,
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Int32> & AInt32In,
        /* [in] */ _ELASTOS AString AStrIn,
        /* [in] */ _ELASTOS WString WStrIn,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Byte> * pAInt8Out,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Int16> * pAInt16Out,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Int32> * pAInt32Out,
        /* [out] */ _ELASTOS AStringBuf * pAsbOut,
        /* [out] */ _ELASTOS WStringBuf * pWsbOut) = 0;

    virtual CARAPI MarshalTst26(
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Int64> & AInt64In,
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Float> & AFloatIn,
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS Double> & ADoubleIn,
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS AChar> & AACharIn,
        /* [in] */ const _ELASTOS BufferOf<_ELASTOS WChar> & AWCharIn,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Int64> * pAInt64Out,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Float> * pAFloatOut,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS Double> * pADoubleOut,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS AChar> * pAACharOut,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS WChar> * pAWCharOut) = 0;

    virtual CARAPI MarshalTst33(
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Byte> & AInt8In,
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Byte> & AByteIn,
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Boolean> & ABoolIn,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Byte> * pAInt8Out,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Byte> * pAByteOut,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Boolean> * pABoolOut) = 0;

    virtual CARAPI MarshalTst34(
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Int16> & AInt16In,
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Int16> & AUInt16In,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Int16> * pAInt16Out,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Int16> * pAUInt16Out) = 0;

    virtual CARAPI MarshalTst35(
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Int32> & AInt32In,
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Int32> & AUInt32In,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Int32> * pAInt32Out,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Int32> * pAUInt32Out) = 0;

    virtual CARAPI MarshalTst36(
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Int64> & AInt64In,
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Int64> & AUInt64In,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Int64> * pAInt64Out,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Int64> * pAUInt64Out) = 0;

    virtual CARAPI MarshalTst37(
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Float> & AFloatIn,
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Double> & ADoubleIn,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Float> * pAFloatOut,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Double> * pADoubleOut) = 0;

    virtual CARAPI MarshalTst38(
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS AChar> & AACharIn,
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS WChar> & AWCharIn,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS AChar> * pAACharOut,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS WChar> * pAWCharOut) = 0;

    virtual CARAPI MarshalTst39(
        /* [in] */ const _ELASTOS ArrayOf<struct TEST_STRUCT_SDK1> & AStructIn,
        /* [out] */ _ELASTOS ArrayOf<struct TEST_STRUCT_SDK1> * pAStructOut) = 0;

    virtual CARAPI MarshalTst40(
        /* [in] */ const _ELASTOS ArrayOf<struct TEST_STRUCT_SDK2> & AStructIn,
        /* [out] */ _ELASTOS ArrayOf<struct TEST_STRUCT_SDK2> * pAStructOut) = 0;

    virtual CARAPI MarshalTst41(
        /* [in] */ const _ELASTOS ArrayOf<IInterface *> & AObjectIn) = 0;

    //virtual CARAPI MarshalTst42(
    //    /* [out] */ _ELASTOS ArrayOf<IInterface*> * pAObjectOut) = 0;

    virtual CARAPI MarshalTst43(
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS EGuid> & AEGuidIn,
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS EMuid> & AEMuidIn,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS EGuid> * pAEGuidOut,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS EMuid> * pAEMuidOut) = 0;

    virtual CARAPI MarshalTst44(
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS ECode> & AECodeIn,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS ECode> * pAECodeOut) = 0;

    virtual CARAPI MarshalTst45(
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Byte> & AInt8In,
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Int16> & AInt16In,
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Int32> & AInt32In,
        /* [in] */ _ELASTOS AString AStrIn,
        /* [in] */ _ELASTOS WString WStrIn,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Byte> * pAInt8Out,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Int16> * pAInt16Out,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Int32> * pAInt32Out,
        /* [out] */ _ELASTOS AStringBuf * pAsbOut,
        /* [out] */ _ELASTOS WStringBuf * pWsbOut) = 0;

    virtual CARAPI MarshalTst46(
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Int64> & AInt64In,
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Float> & AFloatIn,
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS Double> & ADoubleIn,
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS AChar> & AACharIn,
        /* [in] */ const _ELASTOS ArrayOf<_ELASTOS WChar> & AWCharIn,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Int64> * pAInt64Out,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Float> * pAFloatOut,
        /* [out] */ _ELASTOS ArrayOf<_ELASTOS Double> * pADoubleOut,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS AChar> * pAACharOut,
        /* [out] */ _ELASTOS BufferOf<_ELASTOS WChar> * pAWCharOut) = 0;

};

#endif // __INTERFACE_IMarshalTst_DEFINED__
